GRUBの詳細
GRUBはこのコマンドラインの説明なくして、本当は語れない。しかし初心者には難しい話も多いので、別のページにした。できればUNIXを知っている人に読んでもらいたい。
[Minimal BASH-like line editiing is supported. For the first word, TAB |
GRUB Shellは上記にもあるように、BASHライクのファイル名補完機能をもっている。従って、lsこそできないが、忘れてしまったカーネル名なども何とか指定することができる。UNIX使いなら、全く説明するまでもないことだが、知らない人のために説明しておこう。
例えば、「root」コマンドで目的のパーティションをルートに指定して、多分カーネルがあるであろう/bootディレクトリの分かっている先頭文字「vm」までタイプして、TABキーを押してみる。
[TABによるファイル名補完と候補の表示]
grub> kernel /boot/vm |
上記のように候補が表示されると共に、ユニークにできる共通の部分までファイル名が補完される。これをうまく使えば、ファイルをパーティションの中から探すことができる。
またこの補完機能は、「ファイル名」に限らない。例えば「(hd0,1)」といったハードディスクやパーティションを示す識別子に対しても有効である。実はあらゆるコマンド引数に有効なので、この機能は正確には「ファイル名補完機能」ではなく、「コマンド引数補完機能」というべきだろう。例えば、「root (」まで入力してタブを打った場合、次のように表示される。
[ディスクの候補の表示]
grub> root (
|
「(」の次は何らかのディスクを示すものが来るので、候補としてgrubが認識(つまりBIOSで認識)しているディスクが表示される。さらに「(hd0」まで入力してタブキーをたたくと次のようにパーティション候補が表示される。
[パーティションの候補の表示]
grub> root (
|
そのハードディスクに存在するパーティションの情報が見える。パーティションの情報としては、パーティション番号、ファイルシステム、及びパーティションタイプだ。ファイルシステムはgrubが認識できるものだけが、その名称で表示され、それ以外は「unknown」となっている。パーティションタイプは16進数で表示される。この機能を使えば、ハードディスクの中からext2fsパーティションなどを見つけることもできる訳である。
ところで先ほどのファイル名の補完だが、これは今ルートになっている(rootコマンドで指定した)パーティションからしか探してはくれない。ハードディスク上のどこのパーティションにカーネルなどがあるかも分からない場合、ファイル名を指定して、そのファイルが存在するパーティションを探してくれる機能もある。「find」コマンドだ。
[「find」コマンドによるファイルの検索]
|
本物のshellのfindコマンドよりは遥かに単純で、引数は絶対パス名のファイル名(ディレクトリ名もだめ)しか取れないが、そのファイルの存在するパーティションを教えてくれる。
またファイルがテキストなら「cat」コマンドで内容を確認することもできる。
[「cat」コマンドによるファイル内容の表示]
|
ルートパーティションがわからないときに、/etc/fstabを確認するときは便利である。
コマンドをうまく組み合わせれば、あたながその内容を全く知らないパソコンの前に立って、GRUBのプロンプトを見たときでも、そのパソコンにインストールされているLinuxを起動させてしまうことができる。次のような手順である。
まずはとにかく接続ハードディスクとパーティションを確認しよう。これは「root (」と入力してTABキーだった。
grub> root (hd0,
|
沢山Linux Native(ext2fs)のパーティションがある。この中のどこかにカーネルがあるはずである。適当にあたりをつけて、ファイルを探してみる。どうせLinuxのカーネルなど、ルートか/bootにvmlinuzか何かの名前で存在しているに決まっているから、/vmlinzあたりで、探して見よう。
[Minimal BASH-like line editiing is supported. For the first word, TAB |
/boot/vmlinuzでは見つからなかったが、「/vmlinuz」はあった。早速このパーティション(hd0,0)「/dev/hda1」をルートに指定して(これにより、そのパーティションに移動したイメージとなる)、更にルートディレクトリのファイルを見てみる。
grub> find / |
ルートコマンドで、そのパーティションが確かにext2fs(Linux Native)であることも確認できた。「find /」のあとTABを打てば、/ディレクトリ配下のファイルを表示してくれる。ちょっとしたlsコマンドの役目を果たすという訳だ。
いろんなファイルが見つかったが、カーネルは「vmlinuz」で良さそうだ。きっとvmlinuz-2.2.13-33にシンボリックリンクが張ってあるのだろう。initrdもあるからRAMディスクも指定する必要があることも分かる。
次にルートパーティションを調べる必要がある。このパーティションが「(hd0,0)」であることから、ルートパーティションは「/dev/hda1」である可能性もあるが、昔からの習慣でカーネルをルートパーティションとは別のパーティションに置き、このブート用のパーティションを/bootとしてマウントしている可能性がある。それにルートパーティションは、SCSIハードディスクやセカンダリのハードディスクだという可能性もある。「cat」コマンドで「/etc/fstab」を確認しよう。
|
「/etc」ディレクトリすら見つからない。やはりこのパーティション(hd0,0)「/dev/hda1」はルートパーティションではないようである。では、findで「/etc/fstab」を探しよう。
|
(hd0,4)「/dev/hda5」にあった。一応このパーティションに移って、/etc/fstabの内容を確認しよう。
|
間違いない。ルートパーティションは/bootとは別のパーティションだ。さすがに「etc」ディレクトリは、別のパーティションにマウントはされていないようなので、/etc/fstabが見つかったこのパーティション(hd0,4)「/dev/hda5」が、ルートパーティションであることは間違いないようである。
これでカーネル、ルートパーティション、初期RAMディスクの位置を確認できたので当該Linuxを起動できる。
尚、ここで誤解されがちなのだが、ルートからみた場合、カーネルは/boot/vmlinuzなのだが、これはあくまで/dev/hda5パーティションをルートパーティションの/bootにマウントしているためにこう見えるのであって、/dev/hda5パーティション上ではあくまでファイルシステムのルートにこの「vmlinuz」は存在する。
従って、GRUBのカーネル指定では、root指定したパーティションのファイルシステム上で見える形、つまり、この場合は「/boot/vmlinuz」ではなく、「/vmlinuz」と指定する。initrdも同様である。
では、早速カーネルのあるパーティションにrootコマンドで戻って、起動してみよう。
grub> kernel /vmlinuz root=/dev/hda5
grub> initrd /initrd |
カーネルのロードも初期RAMディスクのロードもうまくいったようである。尚カーネルなどの指定は、直接パーティションも指定すれば、rootコマンドでそのパーティションを指定する必要はない。その場合、以下のような指定になる。
grub> initrd (hd0,0)/initrd |
さあ、後はもうブートするだけだね。最後に「boot」コマンドを叩く。
|
うまくLinuxが起動したらご喝采!!
同じような手法で、他のOSも起動できてしまう。Windows系のOSは特にカーネルなどの指定もないので、もっと簡単に起動できてしまうだろう。
こんな芸当ができるブートローダはGRUBをおいて他にはないだろう。
ただし上記の芸当を行う場合、あなたの知らないパソコンにGRUBがインストールされていないといけない訳だ。しかしGRUBブートディスクを用意しておけば、その必要すらないのである。
GRUBブートディレクトリは、「ブートフロッピーディスクの作成」でも触れている方法でイメージから作成できるが、ここでは自分で作る方法を紹介する。またせっかく自分で作るので、前述の方法では作れない、Windowsからでもその中身を見えることができるDOSフォーマットのブートフロッピーディスクを作ってみよう。
ブートフロッピーディスクを作成するにはGRUBコマンドが必要なのだが、ハードディスク上から実行する必要があるため、どうしてもパソコンにPC-UNIXが導入され、そこでGRUBがmakeされていなければならない。ここではLinux上でGRUBブートディスクを作るが、そのことは何ら起動しようとするパソコンにLinuxがインストールされていることを要求するものではない。完全に起動パソコンからは独立した、非常に汎用的なブートディスクになる。
[GRUBブートディスクの作成]
|
まずはDOSフォーマットされたフロッピーディスクを用意してマウントする。次にそのフロッピー上に/boot/grubというディレクトリを作って、そこにstage1とstage2を置く。(ブートフロッピーディレクトリの作成にはstage1_5ファイルは必要ない) その後でGRUB Shellを起動する。
[フロッピーへのGRUBのインストール]
[Minimal BASH-like line editiing is supported. For the first word, TAB
grub> setup (fd0)
|
使うコマンドはMBRにインストールする場合と同じだ。パラメータにそれぞれフロッピーディスクドライブである「(fd0)」を指定する。以上で、GRUBブートディスクの完成だ。このブートディスクでどんなパソコンでも、大抵のOSが起動できるはずである。